unit clsContaCorrente;

interface

uses Dm, dbtables, biblio;

type
  TContaCorrente = class(TObject)
  private
    Conta_Codigo: string;
  public
    Conta_Numero: string;
    Ban_Codigo: string;
    Emp_Codigo: string;
    Conta_Responsavel: string;
    Conta_Agencia: string;
    Conta_DataInic: TDateTime;
    Conta_SaldoInic: Double;
    Conta_Tipo: Smallint;
    Conta_Cedente: string;
    Conta_Limite: Double;
    Conta_Contabil: string;
    Conta_Garantida: string;
    Banco_Nome: string;
    Conta_Inativa: string; //S ou N

    function Gravar(p_Conta_Codigo: string): Byte;
    function Recuperar(p_Conta_Codigo: string): Byte;
    function Recuperar_Banco(p_Conta_Codigo: string): Boolean;
    function Excluir(p_Conta_Codigo: string): Byte;
    function Recuperar_Conta(p_Bco: string): string;
    procedure Consultar(var p_q: TQuery; p_ativo: string);
    function RecuperaConta(p_ContaNumero, p_banco: string): string;
    procedure Retorna_Contas(var tq: TQuery; empresas: string);
  end;

implementation

uses DB;

function TContaCorrente.Gravar;
var
  tq: TQuery;
begin
  tq := Tquery.Create(DmInt);
  tq.databasename := dmint.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.params.clear;
  tq.sql.add('SELECT * FROM ContaCorrente where Conta_Codigo=:k_Conta_Codigo');
  tq.parambyname('k_Conta_Codigo').asstring := strzero(p_Conta_Codigo, 3);
  tq.open;
  if tq.eof then begin
    tq.sql.clear;
    tq.params.clear;
    tq.sql.add('INSERT INTO ContaCorrente VALUES(' +
      ':k_Conta_Codigo,' +
      ':k_Conta_Numero,' +
      ':k_Ban_Codigo,' +
      ':k_Emp_Codigo,' +
      ':k_Conta_Responsavel,' +
      ':k_Conta_Agencia,' +
      ':k_Conta_DataInic,' +
      ':k_Conta_SaldoInic,' +
      ':k_Conta_Tipo,' +
      ':k_Conta_Cedente,' +
      ':k_Conta_Limite,' +
      ':k_Conta_Contabil,' +
      ':k_Conta_Garantida,' +
      ':k_Conta_Inativa)');
  end else begin
    tq.sql.clear;
    tq.params.clear;
    tq.sql.add('UPDATE ContaCorrente SET ' +
      'Conta_Numero=:k_Conta_Numero,' +
      'Emp_Codigo=:k_Emp_Codigo,' +
      'Conta_Responsavel=:k_Conta_Responsavel,' +
      'Conta_Agencia=:k_Conta_Agencia,' +
      'Conta_DataInic=:k_Conta_DataInic,' +
      'Conta_SaldoInic=:k_Conta_SaldoInic,' +
      'Conta_Tipo=:k_Conta_Tipo,' +
      'Conta_Cedente=:k_Conta_Cedente,' +
      'Conta_Limite=:k_Conta_Limite,' +
      'Ban_Codigo=:k_Ban_Codigo,' +
      'Conta_Contabil=:k_Conta_Contabil,' +
      'Conta_Garantida=:k_Conta_Garantida,' +
      'Conta_Inativa=:k_Conta_Inativa ' +
      'where Conta_Codigo=:k_Conta_Codigo');
  end;
  tq.parambyname('k_Conta_Codigo').asstring := strzero(p_Conta_Codigo, 3);
  if ban_codigo <> '' then
    tq.parambyname('k_Ban_Codigo').asstring := strzero(Ban_Codigo, 3)
  else
    tq.parambyname('k_Ban_Codigo').asstring := '';
  tq.parambyname('k_Conta_Numero').asstring := Conta_numero;
  if emp_codigo <> '' then
    tq.parambyname('k_Emp_Codigo').asstring := strzero(Emp_Codigo, 3)
  else
    tq.parambyname('k_Emp_Codigo').asstring := '';
  tq.parambyname('k_Conta_Responsavel').asstring := Conta_Responsavel;
  tq.parambyname('k_Conta_Agencia').asstring := Conta_Agencia;
  tq.parambyname('k_Conta_DataInic').asdatetime := Conta_DataInic;
  tq.parambyname('k_Conta_SaldoInic').asfloat := Conta_SaldoInic;
  tq.parambyname('k_Conta_Tipo').AsInteger := Conta_Tipo;
  tq.parambyname('k_Conta_Cedente').asstring := Conta_Cedente;
  tq.parambyname('k_Conta_Limite').asfloat := Conta_Limite;
  tq.parambyname('k_Conta_Contabil').asstring := Conta_Contabil;
  tq.parambyname('k_Conta_Garantida').asstring := Conta_garantida;
  tq.ParamByName('k_Conta_Inativa').AsString := Conta_Inativa;
  tq.close;
  tq.execsql;
  result := 1;
  tq.Free;
end;

function TContaCorrente.Recuperar;
var
  tq: TQuery;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.sql.add('SELECT * FROM ContaCorrente where Conta_Codigo=:k_Conta_Codigo');
  tq.parambyname('k_Conta_Codigo').asstring := strzero(p_Conta_Codigo, 3);
  tq.open;
  Conta_Codigo := p_Conta_Codigo;
  if tq.eof then begin
    Emp_Codigo := '';
    Conta_Responsavel := '';
    Conta_Agencia := '';
    Conta_DataInic := 0;
    Conta_SaldoInic := 0;
    Conta_Tipo := 0;
    Conta_Cedente := '';
    Conta_Limite := 0;
    Conta_Contabil := '';
    Conta_Numero := '';
    Ban_Codigo := '';
    Conta_garantida := '';
    Conta_Inativa := '';
    Result := 0;
  end else begin
    Emp_Codigo := tq.fieldbyname('Emp_Codigo').asstring;
    Conta_Responsavel := tq.fieldbyname('Conta_Responsavel').asstring;
    Conta_Agencia := tq.fieldbyname('Conta_Agencia').asstring;
    Conta_DataInic := tq.fieldbyname('Conta_DataInic').asdatetime;
    Conta_SaldoInic := tq.fieldbyname('Conta_SaldoInic').asfloat;
    Conta_Tipo := tq.fieldbyname('Conta_Tipo').AsInteger;
    Conta_Cedente := tq.fieldbyname('Conta_Cedente').asstring;
    Conta_Limite := tq.fieldbyname('Conta_Limite').asfloat;
    Conta_Contabil := tq.fieldbyname('Conta_Contabil').asstring;
    Conta_Numero := tq.fieldbyname('Conta_Numero').asstring;
    Ban_Codigo := tq.fieldbyname('Ban_Codigo').asstring;
    Conta_Garantida := tq.fieldbyname('Conta_Garantida').asstring;
    Conta_Inativa := tq.fieldbyname('Conta_Inativa').AsString;
    Result := 1;
  end;
  tq.Close;
  tq.Free;
end;

function TContaCorrente.Recuperar_Banco;
var
  tq: TQuery;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.sql.add('Select b.Ban_Nome,c.Conta_Numero from ContaCorrente c,Banco b where ' +
    'Conta_Codigo=:a and b.Ban_Codigo=c.Ban_Codigo');
  tq.params[0].asstring := strzero(p_Conta_Codigo, 3);
  tq.open;
  if tq.eof then Result := false else Result := true;
  Banco_Nome := tq.fieldbyname('Ban_Nome').asstring;
  Conta_Numero := tq.fieldbyname('Conta_Numero').asstring;
  tq.Close;
  tq.Free;
end;

function TContaCorrente.Excluir;
var
  tq: TQuery;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := dmint.db.databasename;
  tq.active := False;
  tq.close;
  tq.sql.Clear;
  tq.params.clear;
  tq.sql.add('DELETE FROM ContaCorrente where Conta_Codigo=:k_Conta_Codigo');
  tq.parambyname('k_Conta_Codigo').asstring := strzero(p_Conta_Codigo, 3);
  tq.execSQL;
  Result := 1;
  tq.close;
  tq.Free;
end;

procedure TContaCorrente.Consultar;
begin
  p_q.sql.Clear;
  p_q.Params.Clear;
  p_q.sql.add('Select * from ContaCorrente c, banco b ' +
    'where c.ban_codigo=b.ban_codigo ');
  if AllTrim(p_ativo) <> '' then
    p_q.sql.add('and Conta_Inativa = ''N''  ');
  p_q.sql.add('order by c.Ban_Codigo, c.Conta_Numero');
end;

procedure TContaCorrente.Retorna_Contas;
begin
  tq.sql.Clear;
  tq.Params.Clear;
  if empresas = '' then
    empresas := #39 + '@^^@' + #39;
  tq.sql.add('Select b.Ban_Nome,c.Conta_Numero,c.Emp_Codigo, c.ban_codigo, c.conta_Inativa ' +
    ' from Banco b,ContaCorrente c where ' +
    'c.Emp_Codigo in (' + empresas + ') and b.ban_Codigo=c.Ban_Codigo' +
    ' group by b.ban_nome,c.Conta_Numero,c.emp_codigo,c.ban_codigo, c.conta_Inativa order by b.ban_nome');
end;

function TContaCorrente.Recuperar_Conta(p_Bco: string): string;
var
  tq: TQuery;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := dmint.db.databasename;
  tq.active := False;
  tq.close;
  tq.sql.Clear;
  tq.params.clear;
  tq.sql.add('Select * from ContaCorrente where Ban_Codigo =:a');
  tq.Params[0].AsString := p_Bco;
  tq.Open;
  Result := tq.FieldByName('Conta_Codigo').AsString;
  tq.Close;
  tq.Free;
end;

function TContaCorrente.RecuperaConta;
var
  tq: TQuery;
  tam: Integer;
begin
  if p_banco = 'Bradesco' then tam := 8;
  if p_banco = 'Brasil' then tam := 12;
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.sql.add('Select Conta_Codigo,Conta_Numero from ContaCorrente ');
  tq.open;
  Result := '';
  while not tq.Eof do begin
    if StrZero(tira_PT(tq.FieldByName('Conta_Numero').AsString), tam) = p_ContaNumero then begin
      Result := tq.FieldbyName('Conta_Codigo').AsString;
      break;
    end;
    tq.Next;
  end;
  tq.Close;
  tq.Free;
end;

end.
